import axios from 'axios'
import { ElMessage } from 'element-plus'
axios.defaults.headers.common['Authorization'] = 'AUTH_TOKEN'
// SpringMVC使用 @RequestBody 提取表单数据  对象 （Emp ，Dept）  --- >
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8'
axios.defaults.headers.put['Content-Type'] = 'application/json;charset=utf-8'
axios.defaults.headers.delete['Content-Type'] = 'application/json;charset=utf-8'
const config = {
  // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: 'http://localhost:8081',
  // 自定义请求头
  headers: { 'Content-Type': 'application/json;charset=utf-8' },

  // `timeout` 指定请求超时的毫秒数。
  // 如果请求时间超过 `timeout` 的值，则请求会被中断
  timeout: 5000, // 默认值是 `0` (永不超时)

  // `withCredentials` 表示跨域请求时是否需要使用凭证
  withCredentials: false, // default

  // `responseType` 表示浏览器将要响应的数据类型
  // 选项包括: 'arraybuffer', 'document', 'json', 'text', 'stream'
  // 浏览器专属：'blob'
  responseType: 'json', // 默认值

  // `responseEncoding` 表示用于解码响应的编码 (Node.js 专属)
  // 注意：忽略 `responseType` 的值为 'stream'，或者是客户端请求
  // Note: Ignored for `responseType` of 'stream' or client-side requests
  responseEncoding: 'utf8' // 默认值
}

const instance = axios.create(config)

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在每次ajax请求之前，增加Token
    let token = sessionStorage.getItem('token')
    if (!token) {
      token = 'AUTH_TOKEN'
    }

    config.headers['Authorization'] = token

    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么

    return response
  },
  function (error) {
    ElMessage.error('I am SO Sorry , this is a error message.')
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default instance
